package dataLayer.dataAccessObjects.xml;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import businessObjects.IEmailKontakt;
import dataLayer.businessObjects.EmailKontakt;
import dataLayer.dataAccessObjects.IEmailKontaktDao;
import exception.NoEmailKontaktFoundException;


public class EmailKontaktDaoXml implements IEmailKontaktDao{

	
	@Override
	public IEmailKontakt create() {
		IEmailKontakt kontakt = new EmailKontakt();
		return kontakt;
	}

	@Override
	public void delete(IEmailKontakt emailKontakt) {
		try {
	    	 
	    		File xmlDatei = new File(".\\text.xml");
	    		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	    		DocumentBuilder erstellung = dbf.newDocumentBuilder();
	    		Document dokument = erstellung.parse(xmlDatei);
	    	
	    		dokument.getDocumentElement().normalize();
	     
	    		NodeList knotenListe = dokument.getElementsByTagName("ID");
	    	
	    		int tempID = 0;
	    	
	    		for(int temp = 0; temp <= knotenListe.getLength()-1;temp++)
	    		{
	    			Node knoten = knotenListe.item(temp);
	    			Element element = (Element) knoten;
	    			tempID = Integer.parseInt(element.getAttribute("id"));
	    		
	    			if(emailKontakt.getId() == tempID)
	    			{
	    				knoten.getParentNode().removeChild(knoten);
	    				TransformerFactory transformerFactory = TransformerFactory.newInstance();
	    				Transformer transformer = transformerFactory.newTransformer();
	    				DOMSource domSource = new DOMSource(dokument);
	    				StreamResult streamResult = new StreamResult(xmlDatei);
	    				transformer.transform(domSource, streamResult);
	    				break;
	    			}
	    		} 		
	     	}
			catch (Exception e) {
	        	e.printStackTrace();
	        }
	}

	@Override
	public IEmailKontakt first() {
		try {
	    	 
	    	File xmlDatei = new File(".\\text.xml");
	    	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	    	DocumentBuilder erstellung = dbf.newDocumentBuilder();
	    	Document dokument = erstellung.parse(xmlDatei);
	    	EmailKontakt EmailKontakt = new EmailKontakt();
	    	dokument.getDocumentElement().normalize();
	     
	    	NodeList knotenListe = dokument.getElementsByTagName("ID");
			    	
	    	int firstID = 0;

	    	Node knoten = knotenListe.item(firstID);
	    	Element element = (Element) knoten;
	    		
	    	EmailKontakt.setVorname(element.getElementsByTagName("Vorname").item(0).getTextContent());
	    	EmailKontakt.setNachname(element.getElementsByTagName("Nachname").item(0).getTextContent());
	    	EmailKontakt.setEmail(element.getElementsByTagName("Email").item(0).getTextContent());
	    	EmailKontakt.setId(Integer.parseInt(element.getAttribute("id")));
	    	
	    	if(EmailKontakt.equals(null))
	    	{
	    		System.out.println("null");
	    		throw new NoEmailKontaktFoundException();
	    	}
	    		
	    	return EmailKontakt;
	    	
        } catch (Exception e) {
        	e.printStackTrace();
        }
        	return null;
	}

	@Override
	public IEmailKontakt last() {
		EmailKontakt EmailKontakt = new EmailKontakt();
		try {
	
	    	File xmlDatei = new File(".\\text.xml");
	    	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	    	DocumentBuilder erstellung = dbf.newDocumentBuilder();
	    	Document dokument = erstellung.parse(xmlDatei);
	    	
	    	dokument.getDocumentElement().normalize();     
	    	NodeList knotenListe = dokument.getElementsByTagName("ID");
			    	
	    	int lastID = knotenListe.getLength()-1;

	    	Node knoten = knotenListe.item(lastID);
	    	Element element = (Element) knoten;
	    		
	    	EmailKontakt.setVorname(element.getElementsByTagName("Vorname").item(0).getTextContent());
	    	EmailKontakt.setNachname(element.getElementsByTagName("Nachname").item(0).getTextContent());
	    	EmailKontakt.setEmail(element.getElementsByTagName("Email").item(0).getTextContent());
	    	EmailKontakt.setId(Integer.parseInt(element.getAttribute("id")));
	    	
	    	if(EmailKontakt.equals(null))
	    	{
	    		System.out.println("null");
	    		throw new NoEmailKontaktFoundException();
	    	}
	    	
        } catch (Exception e) {
        	e.printStackTrace();
        }
        	return EmailKontakt;
	}

	@Override
	public IEmailKontakt next(IEmailKontakt emailKontakt) {
		EmailKontakt EmailKontakt = new EmailKontakt();
		List<EmailKontakt> Liste = new ArrayList<EmailKontakt>();
		try {
			File xmlDatei = new File(".\\text.xml");
	    	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	    	DocumentBuilder erstellung = dbf.newDocumentBuilder();
	    	Document dokument = erstellung.parse(xmlDatei);
	    	
	    	dokument.getDocumentElement().normalize();
	     
	    	NodeList knotenListe = dokument.getElementsByTagName("ID");
	     
	    	for (int temp = 0; temp <= knotenListe.getLength()-1; temp++) {
	     
	    		Node knoten = knotenListe.item(temp);
	    		EmailKontakt Emailkontakt = new EmailKontakt();
	     
	    		if (knoten.getNodeType() == Node.ELEMENT_NODE) {
	     
	    			Element element = (Element) knoten;
	    			
	    	    	Emailkontakt.setVorname(element.getElementsByTagName("Vorname").item(0).getTextContent());
	    	    	Emailkontakt.setNachname(element.getElementsByTagName("Nachname").item(0).getTextContent());
	    	    	Emailkontakt.setEmail(element.getElementsByTagName("Email").item(0).getTextContent());
	    	    	Emailkontakt.setId(Integer.parseInt(element.getAttribute("id")));
	    	    	Liste.add(Emailkontakt);
	    		}
	    	}
	    	
	    } catch (Exception e) {
	    	e.printStackTrace();
	    } 
		
		for(int i = 0; i < Liste.size();i++){
			if(Liste.get(i).getId() == emailKontakt.getId() && i < Liste.size()-1){
				EmailKontakt = Liste.get(i+1);
				break;
			}
			else if(i == Liste.size()-1)
			{
				EmailKontakt = Liste.get(i);
			}
		}
		return EmailKontakt;
		
	}
			

	@Override
	public IEmailKontakt previous(IEmailKontakt emailKontakt) {
		EmailKontakt EmailKontakt = new EmailKontakt();
		List<EmailKontakt> Liste = new ArrayList<EmailKontakt>();
		try {
			File xmlDatei = new File(".\\text.xml");
	    	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	    	DocumentBuilder erstellung = dbf.newDocumentBuilder();
	    	Document dokument = erstellung.parse(xmlDatei);
	    	
	    	dokument.getDocumentElement().normalize();
	     
	    	NodeList knotenListe = dokument.getElementsByTagName("ID");
	     
	    	for (int temp = 0; temp <= knotenListe.getLength()-1; temp++) {
	     
	    		Node knoten = knotenListe.item(temp);
	    		EmailKontakt Emailkontakt = new EmailKontakt();
	     
	    		if (knoten.getNodeType() == Node.ELEMENT_NODE) {
	     
	    			Element element = (Element) knoten;
	    			
	    	    	Emailkontakt.setVorname(element.getElementsByTagName("Vorname").item(0).getTextContent());
	    	    	Emailkontakt.setNachname(element.getElementsByTagName("Nachname").item(0).getTextContent());
	    	    	Emailkontakt.setEmail(element.getElementsByTagName("Email").item(0).getTextContent());
	    	    	Emailkontakt.setId(Integer.parseInt(element.getAttribute("id")));
	    	    	Liste.add(Emailkontakt);
	    		}
	    	}
	    	
	    } catch (Exception e) {
	    	e.printStackTrace();
	    } 
		
		for(int i = Liste.size()-1; i >= 0; i--){
			if(Liste.get(i).getId() == emailKontakt.getId()){
				if(i > 0){
					EmailKontakt = Liste.get(i-1);
				} else {
					return emailKontakt;
				}
			}
		}
		return EmailKontakt;
	}

	@Override
	public void save(IEmailKontakt emailKontakt) {
		
		
	}

	@Override
	public List<IEmailKontakt> select() {
		try {
	    	File xmlDatei = new File(".\\text.xml");
	    	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	    	DocumentBuilder erstellung = dbf.newDocumentBuilder();
	    	Document dokument = erstellung.parse(xmlDatei);
	    	List<IEmailKontakt> Liste = new ArrayList<IEmailKontakt>();
	    	
	    	dokument.getDocumentElement().normalize();
	     
	    	NodeList knotenListe = dokument.getElementsByTagName("ID");
	     
	    	for (int temp = 0; temp <= knotenListe.getLength()-1; temp++) {
	     
	    		Node knoten = knotenListe.item(temp);
	    		EmailKontakt Emailkontakt = new EmailKontakt();
	     
	    		if (knoten.getNodeType() == Node.ELEMENT_NODE) {
	     
	    			Element element = (Element) knoten;
	    	    	Emailkontakt.setVorname(element.getElementsByTagName("Vorname").item(0).getTextContent());
	    	    	Emailkontakt.setNachname(element.getElementsByTagName("Nachname").item(0).getTextContent());
	    	    	Emailkontakt.setEmail(element.getElementsByTagName("Email").item(0).getTextContent());
	    	    	Emailkontakt.setId(Integer.parseInt(element.getAttribute("id")));
	    	    	Liste.add(Emailkontakt);
	    		}
	    	}
	    	return Liste;
	    	
	        } catch (Exception e) {
	        	e.printStackTrace();
	        	return null;
	        }
	}

	@Override
	public IEmailKontakt select(int id) {
		EmailKontakt EmailKontakt = new EmailKontakt();
		try {
	    	 
	    	File xmlDatei = new File(".\\text.xml");
	    	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	    	DocumentBuilder erstellung = dbf.newDocumentBuilder();
	    	Document dokument = erstellung.parse(xmlDatei);
	    	
	    	dokument.getDocumentElement().normalize();
	     
	    	NodeList knotenListe = dokument.getElementsByTagName("ID");
			    	
	    	int tempID = 0;
	    	
	    	for(int temp = 0; temp <= knotenListe.getLength()-1;temp++)
	    	{
	    		Node knoten = knotenListe.item(temp);
	    		Element element = (Element) knoten;
	    		tempID = Integer.parseInt(element.getAttribute("id"));
	    		
	    		if(id == tempID)
	    		{
	    			EmailKontakt.setVorname(element.getElementsByTagName("Vorname").item(0).getTextContent());
	    			EmailKontakt.setNachname(element.getElementsByTagName("Nachname").item(0).getTextContent());
	    			EmailKontakt.setEmail(element.getElementsByTagName("Email").item(0).getTextContent());
	    			EmailKontakt.setId(id);
	    			break;
	    		}
	    	}
	    	if(EmailKontakt.equals(null))
	    	{
	    		System.out.println("null");
	    		throw new NoEmailKontaktFoundException();
	    	}
	    	
        } catch (Exception e) {
        	e.printStackTrace();
        }
		return EmailKontakt;
	}

}
